#pragma once 
#include<istream>
#include<string>
#include<fstream>
#include<unordered_map>
#include"Log.hpp"

using namespace std;

const string dictname="./dict.txt";
const string sep=":";
extern Log lg;

//对字符串进行分割
static bool Split(string &s,string *part1,string *part2)
{
    auto pos=s.find(sep);
    if(pos==string::npos)return false;//没有找到该分割符
    *part1=s.substr(0,pos);
    *part2=s.substr(pos+1);
    return true;
}

class Init
{
public:
    Init()
    {
        ifstream in(dictname);//打开文件流提取
        if(!in.is_open())
        {
            lg(Fatal,"ifstream open%s error",dictname.c_str());
            exit(1);
        }
        string line;
        while(getline(in,line))//读取文件的一行
        {
            string part1,part2;
            Split(line,&part1,&part2);
            dict.insert({part1,part2});
        }
        //至此，文件中的所有的单词和翻译都被读取为键值对加入到了map中
        in.close();

    }
    string translation(const string &key)
    {
        auto iter=dict.find(key);
        if(iter==dict.end())return "Unkown";
        else return iter->second;//迭代器重载了->访问，并且编译器优化了一个->，可以直接访问键值对结构体内部的second数据
    }
private:
    unordered_map<string,string>dict;
};